home *** CD-ROM | disk | FTP | other *** search
- #include "crcpchdr.h"
-
- create_file(c,args,opts)
- char c, *args, *opts;
- {
- char filename[17], *t1, *t2, *t3;
- if (!has_auth("W",cur_dir,cur_root)) return(not_auth('W',cur_dir,cur_root));
- threeparse(args,&t1,&t2,&t3);
- uppercase(t1); uppercase(t2);
-
- if (!*t1) {
- if (!find_option(opts,'q') && beginner) disp_msg(13);
- t1 = disp_reply(file_prompt(beginner,"create/edit"),filename,14);
- if (!*t1) return(nothing_done());
- }
- if (check_fn(t1,TRUE)) return;
- if (check_rsvf(t1,TRUE)) return; /* Can't use reserved filename */
- if (!*t2) t2 = t1; /* No second file specified: dest = source */
- if (check_fn(t2,TRUE)) return;
- if (check_rsvf(t2,TRUE)) return; /* Can't use reserved filename */
-
- /* NOTE: SYSEDIT does NOT need CUR_DIR and CUR_ROOT as arguments - can
- now use alternate directory path root/dir */
- sysedit(cur_dir,cur_root,t2,cur_dir,cur_root,t1,opts);
- }
-
- xfer_file(c,args,opts)
- char c,*args,*opts;
- {
- int noargs, quiet;
- char *prompt, acctype;
- char buff[27];
-
- acctype = 'R';
- quiet = find_option(opts,'q');
- noargs = !(*args); /* There were no arguments on command line */
- if (!has_auth(&acctype,cur_dir,cur_root)) goto nopsorry;
- stptok(args,buff,sizeof(buff),""); /* Truncate if necessary */
- if (buff[0]) goto gotaf1; /* !(noargs) */
- if (!quiet && beginner) disp_msg(21);
- oops:
-
- if (beginner) prompt = "Enter '?', or 'R' to receive, or 'S' to send file: ";
- else prompt = "<R>eceive or <S>end or ?: ";
- disp_reply(prompt,buff,25);
- gotaf1:
- buff[0] = toupper(buff[0]);
- if (buff[0]=='R') {
- acctype = 'W';
- if (!has_auth(&acctype,cur_dir,cur_root)) goto nopsorry;
- up_load(buff,opts); /* Pass parms */
- return;
- }
- else if (buff[0]=='?') help(XFF_HLP,opts);
- else if (buff[0]=='S') return(down_load(buff,opts)); /* again */
- else if (buff[0]=='\0') return(nothing_done());
- if (noargs) goto oops; /* Loop only if no arguments at beginning */
- return;
-
- nopsorry: return(not_auth(acctype,cur_dir,cur_root));
- }
-
-
- /* char *parms points to '[arg1]': arg1=[d:]name[.ext] */
- static char *askfilename(parms,opts)
- char *parms, *opts;
- {
- char *prompt, *badchptr;
- static char buff[17];
- int quiet;
-
- quiet = find_option(opts,'q');
- if (!*parms && !quiet && beginner) disp_msg(22);
- forever {
- if (*parms) stptok(parms,buff,17,"");
- else {
- if (beginner) prompt="Press <ENTER> or enter a valid file name (d:name.ext) ";
- else prompt = "Filename: ";
- disp_reply(prompt,buff,15);
- }
- if (!buff[0]) break;
- prompt = stpblk(rtrim(buff));
- if (badchptr=stpbrk(prompt,INVDOSFNCHR)) bad_fn(*badchptr);
- else return(prompt);
- parms = "";
- }
- return(buff);
- }
-
- /* char *parms points to '[arg1]': arg1=A[????] or X[?????] */
- static char xfertype(parms,opts)
- char *parms, *opts;
- {
- char *prompt;
- static char buff[9];
-
- if (!*parms && beginner && !find_option(opts,'q')) disp_msg(24);
-
- forever {
- if (*parms) buff[0]=*parms;
- else {
- if (beginner) prompt="Enter '?', or 'A' for Ascii transfer or 'X' for XMODEM: ";
- else prompt = "<A>scii <X>modem or ?: ";
- disp_reply(prompt,buff,7);
- }
- if ((buff[0]=toupper(buff[0]))=='A') return 'A';
- else if (buff[0]=='X') {
- if (*wordlen!='8') {
- disp_msg(27);
- return('\0');
- }
- return 'X';
- }
- else if (buff[0]=='\0') return '\0';
- else if (buff[0]=='?') help(XFF2_HLP,opts);
- parms = "";
- inv_arg();
- }
- }
-
- /* char *parms points to 'xx [arg1 [arg2]]': arg2=[d:]name[.ext] */
- static down_load(parms,opts)
- char *parms, *opts;
- {
- char xt, *fn, *prompt, buff[6];
- int bsav;
- FILE *fp;
- int quiet;
- int outwidth, outlength;
-
- quiet = find_option(opts,'q');
- parms = skptok(parms); /* Skip 'xx' */
- xt = xfertype(parms,opts); /* Get Xfertype from PARMS, or prompt */
- if (!xt) return(nothing_done());
- parms = skptok(parms); /* Skip possible arg1 */
- fn = askfilename(parms,opts);
- if (!*fn) return(nothing_done());
- uppercase(fn);
- if ((fp=fopen(fn,"r"))==NULL) return(not_open());
- bsav = beginner;
- beginner = FALSE;
- if (xt=='A' && !quiet) see_dtables('@',"","");
- else if (!quiet) printf("XMODEM protocol used.\r\n");
- beginner = bsav;
- printf("Ready to send file: %s\r\n",fn);
- cr();
- if (beginner) prompt="Enter 'Y' when ready for file transfer or press <ENTER>: ";
- else prompt="'Y' when ready: ";
- disp_reply(prompt,buff,4);
- if (toupper(buff[0])!='Y') {
- fclose(fp);
- nothing_done();
- return;
- }
- if (xt=='A') {
- if (beginner) ctlsctlk();
- printf(dn_tab.before);
- outwidth = utwidth;
- outlength = utlength;
- utwidth = utlength = 0; /* So no CR/LF or 'More ?' is written to STDOUT */
- fileterm(fp,"t"); /* "t" (text option) is opposite to 'p' option */
- fclose(fp);
- printf(dn_tab.after);
- utwidth = outwidth; /* Get back user t-settings */
- utlength = outlength;
- printf("\r\nText transfer complete\r\n");
- }
- else {
- fclose(fp);
- xsendf(fn,opts);
- }
- record_fxf(DOWNLOAD,xt,fn); /* Update: FXFER user record */
- cr();
- if (!quiet && beginner) printf("Returning from send file transfer section\r\n");
- }
-
-
- /* char *parms points to 'xx [arg1 [arg2]]': arg2=[d:]name[.ext] */
- static up_load(parms,opts)
- char *parms, *opts;
- {
- char xt, *fn, *ll, *prompt, buff[6];
- FILE *fp;
- int quiet;
- long getfree();
-
-
- printf("There are %ld bytes free in the file system\r\n",getfree(0));
- quiet = find_option(opts,'q');
- parms = skptok(parms); /* Skip 'xx' */
- xt = xfertype(parms,opts); /* Get Xfertype from PARMS, or prompt */
- if (!xt) return(nothing_done());
- parms = skptok(parms); /* Skip possible arg1 */
- fn = askfilename(parms,opts);
- if (!*fn) return(nothing_done());
- if ((fp=fopen(uppercase(fn),"r"))!=NULL) {
- printf("File `%s' already exists.\r\n",fn);
- fclose(fp);
- return;
- }
- if (!quiet) {
- if (xt=='A') printf("ASCII file transfer\r\n");
- else printf("XMODEM protocol used.\r\n");
- }
- printf("Ready to receive file: %s\r\n",fn);
- cr();
- if (beginner) prompt="Enter 'Y' to continue or press <ENTER>: ";
- else prompt="'Y' continues: ";
- disp_reply(prompt,buff,4);
- if (toupper(buff[0])!='Y') return(nothing_done());
- if (xt=='A') finput(fn,opts);
- else {
- if (!quiet && beginner)
- printf("If problem occurs, please wait for the abort -- about 30 sec\r\n\r\n");
- xreadf(fn,opts);
- }
- record_fxf(UPLOAD,xt,fn); /* Update: FXFER user record */
- cr();
- if (!quiet && beginner) printf("Returning from receive file transfer section\r\n");
- }
-
-
- static record_fxf(what,type,file)
- int what;
- char type;
- char *file;
- {
- char *tokptr;
- int upl, dnl;
-
- if (*fxfer) {
- upl = mxti(fxfer,1);
- dnl = mxti(fxfer,2);
- }
- else upl = dnl = 0;
-
- sprintf(fxfer,"%d %d ",what==UPLOAD?upl+1:upl,what==DOWNLOAD?dnl+1:dnl);
-
- if (what==UPLOAD) tokptr = "UPLOAD ";
- else tokptr = "DOWNLOAD ";
-
- strcat(fxfer,tokptr);
- strcat(fxfer,date());
- strcat(fxfer," ");
- strcat(fxfer,file);
- strcat(fxfer,type=='A'?" ASCII":" XMODEM");
- }
-
-
- static set_dntab(whatfor,table,maxlen,args,opts)
- char *whatfor, *table;
- int maxlen;
- char *args,*opts;
- {
- int quiet;
-
- uppercase(whatfor);
- quiet = find_option(opts,'q');
- if (!*args) {
- printf("Enter decimal list for '%s' text transfer protocol below:\r\n",whatfor);
- if (!quiet && beginner) {
- mputs("Press <ENTER> to leave untouched; enter '*' to zap.\r\n");
- printf("Use comma to delimit codes; up to %d allowed\r\n\r\n",maxlen-1);
- }
- disp_reply("",workstr,LINESIZE);
- }
- else stptok(args,workstr,LINESIZE," ");
- if (!*workstr) return(nothing_done());
- else if (workstr[0]=='*') *table = '\0';
- else if (bin_list(table,workstr,maxlen)!=NULL && !quiet)
- printf("'%s' text transfer table has been updated\r\n",whatfor);
- }
-
- static set_dtables(args,opts)
- char *args, *opts;
- {
- char buff[6];
- char *which;
-
- if (!find_option(opts,'q') && beginner) disp_msg(23);
- set_dntab("BEFORE",dn_tab.before,sizeof(dn_tab.before),args,opts);
- set_dntab("AFTER",dn_tab.after,sizeof(dn_tab.after),skptok(args),opts);
- }
-
-
- see_dtables(c,args,opts)
- char c, *args, *opts;
- {
- char charlist[LINESIZE];
- char *ll, buff[6];
- int quiet;
-
- quiet = find_option(opts,'q');
- buff[0] = 'Y';
- if (find_option(opts,'c')) goto chgitn;
- if (!quiet && beginner) disp_msg(25);
- if (!quiet) printf("ASCII file transfer protocol settings:\r\n");
- if (dn_tab.before[0]!='\0') {
- ll = dec_list(charlist,dn_tab.before,sizeof(charlist));
- if (beginner) printf("ASCII code(s) '%s' will be sent before file transmission\r\n",ll);
- else printf("'%s' prepended to data\r\n",ll);
- }
- if (dn_tab.after[0]!='\0') {
- ll = dec_list(charlist,dn_tab.after,sizeof(charlist));
- if (beginner) printf("ASCII code(s) '%s' will be sent after file transmission\r\n",ll);
- else printf("'%s' appended to data\r\n",ll);
- }
- if (!(dn_tab.after[0]|dn_tab.before[0])) printf("None\r\n");
- disp_reply("Enter 'Y' to change code sequence or press <ENTER>: ",buff,4);
- chgitn:
- if (toupper(buff[0])=='Y') set_dtables(args,opts);
- else nothing_done();
- }
-
-
- static int sysedit(destdir,destroot,destfile,sourcedir,sourceroot,sourcefile,opts)
- char sourcedir[], sourceroot[], sourcefile[],
- destdir[], destroot[], destfile[];
- char *opts;
- {
- int rc;
- char *select, *getenv();
- char sourcefn[DIRSIZE+17], destfn[DIRSIZE+17];
-
- if (sysdir(sourcedir,sourceroot)) return(baddir(sourcedir));
- else if (sysdir(destdir,destroot)) return(baddir(destdir));
-
- /* Zap global status variable to say: Don't force the guy off now */
- noforcenow = TRUE;
-
- if (find_option(opts,'2')) select=alt_editor; /* Global sys variables */
- else select=sys_editor;
-
- if (strcmp(sourcedir,cur_dir) || strcmp(sourceroot,cur_root)) {
- prefix_dir(disk_buffer,sourcedir,sourceroot);
- prefix_dir(sourcefn,sourcefile,disk_buffer);
- }
- else strcpy(sourcefn,sourcefile);
-
- if (strcmp(destdir,cur_dir) || strcmp(destroot,cur_root)) {
- prefix_dir(disk_buffer,destdir,destroot);
- prefix_dir(destfn,destfile,disk_buffer);
- }
- else strcpy(destfn,destfile);
-
- if (select!=NULL) {
- sprintf(disk_buffer,"%s %s %s",select,sourcefn,destfn);
- cr();
- if (debug) printf("calling dos: '%s'\r\n",disk_buffer);
- rc = system(disk_buffer);
- cr();
- if (rc) printf("DOS ERROR %d from invoking editor\r\n",rc);
- }
- else {
- printf("Editor: not available.\r\n");
- rc = 98;
- }
- /* All done */
- noforcenow = FALSE; /* Can force him now if he spent too much time here */
- return(rc); /* Return with status */
- }
-